package com.herr.singleton;

/**
 * 3、饿汉式
 * 是否 Lazy 初始化：否
 * 是否多线程安全：是
 * 描述：这种方式比较常用，但容易产生垃圾对象。
 * 优点：没有加锁，执行效率会提高。
 * 缺点：类加载时就初始化，浪费内存。
 */
public class HungrySingleton {
    //创建 com.herr.singleton.HungrySingleton 的一个对象
    private static HungrySingleton instance = new HungrySingleton();

    //让构造函数为 private，这样该类就不会被实例化
    private HungrySingleton(){
        //为规避反射漏洞，可在private 构造函数中，添加逻辑判断，多次构造抛出异常
        if(instance!= null){
            throw new RuntimeException();
        }
    }

    //获取唯一可用的对象
    public static HungrySingleton getInstance(){
        return instance;
    }

    public void showMessage(){
        System.out.println("Hello com.herr.singleton.HungrySingleton!");
    }
}
